?`Needs: mexp.tm`?p

?`<vm:cond>`?p
?`m{+x.xzb`
%mIf ?=
?`}{+x.xb`
%mElse ?=
?`}`
%mEndIf ?=

%A ?n %mLab.beg ?=
%Z ?n %mLab.end ?=
%mLab.beg ?? %mLab.v1 ?=
%mLab.beg ?? %mLab.v2 ?=

?`<str:name>`?p
?`%mLabLab.1if ?? %mLabLab.1el ??
  %mLab.v2 ?? %mLab.end ?? %> ?& ?/
  ?x %mLab.nam. ?x ?s ?=
`%mLabLab ?=
?`%mLab.beg ?? %mLab.v2 ?=
  %mLab.v1 ?%mINC
  %mLabLab.2if ?? %mLabLab.1el ??
  %mLab.v1 ?? %mLab.end ?? %> ?& ?/
`%mLabLab.1if ?=
?)?`?)
Error: mPro: Label: More
?(?.`?(
%mLabLab.2if ?=
?`%mLab.v1 ???c %mLab.v2 ???c ?s
  %mLab.v2 ?%mINC
`%mLabLab.1el ?=

%?%mLabDef %mLab ?=
?`<str:type> <str:name>`?p
?`?m?m %mLab.nam. ?x ?s ?~
  %?p ?x %mLabLab ?? ?x ?/
  %mLab.nam. ?x ?s ?x?$???$
`%mLabRef ?=
?`<str:name>`?p
?`%: ?x ?%mLabRef
`%mLabDef ?=
?`<str:name>`?p
?`%= ?x ?%mLabRef
`%mLabAbs ?=
?`<str:name>`?p
?`%@ ?x ?%mLabRef
`%mLabRel ?=

?`<str:name>`?p
?`.?'mLabRel'???$I.A-.4G+
`%mAbs ?=

?`<vm:ofs> <str:name>`?p
?`.?'mLabRel'???$I+.A-~g
`%mGet1 ?=
?`<vm:ofs> <str:name>`?p
?`.?'mLabRel'???$I+.A-~w
`%mGet2 ?=
?`<vm:ofs> <str:name>`?p
?`.?'mLabRel'???$I+.A-~G
`%mGet4 ?=

?`<vm:val> <vm:ofs> <str:name>`?p
?`.?'mLabRel'???$I+.A-~s
`%mSet1 ?=
?`<vm:val> <vm:ofs> <str:name>`?p
?`.?'mLabRel'???$I+.A-~W
`%mSet2 ?=
?`<vm:val> <vm:ofs> <str:name>`?p
?`.?'mLabRel'???$I+.A-~S
`%mSet4 ?=

?`<vm:cond> <str:name>`?p
?`.?'mLabRel'???$I.9-~j
`%mJump ?=
?`<str:name>`?p
?`.?'mLabRel'???$I.9-~c
`%mCall_ ?=
?`<str:name>`?p
?`.1 ?%mJump
`%mGoto ?=
?`<str:name>`?p
?`%v1nam ?+
  %v1nam ?? %.beg ?s
  ?%mCall_
  %mFunc.fun. %v1nam ???s %.par. ?s
  ?? %4 %* ?& %4 %+ ?& ?#
  .8G .?$+ .8S
  %v1nam ?-
`%mCall ?=
?`%mFunc.nam ?? %.ret ?s
  ?%mGoto
`%mReturn ?=

?`mFunc<str:parn>...<str:par1><str:name>`?p
?`%mFunc.fun. ?x?s %v1nam ?+
  %v1nam ?? %.par. ?s %v1par ?+
  %0 %v1par ?? ?=
  ?%mFuncPar
`%mFunc ?=
?`%v2nam ?+
  %mFuncPar2 ??
  %mFuncPar3 ??
  %mFunc %v2nam ?? ?! ?/
`%mFuncPar ?=
?`%2 %v1par ???? %+ ?&
  %v1par ?? %v2nam ?? ?s ?=
  %v1par ?? ?%mINC
  %v2nam ?-
  ?%mFuncPar
`%mFuncPar2 ?=
?`%v2nam ?-
  %v1par ?-
  %v1nam ?-
`%mFuncPar3 ?=

?`<str:name>`?p
?`%mFunc.nam ?=
  %mFunc.fun. %mFunc.nam ???s %.par. ?s
  %mFunc.par ?=
  %mFunc.fun. %mFunc.nam ???s %.var. ?s
  %mFunc.var ?=
  %0 %mFunc.var ?? ?=
  %mFunc.nam ?? ?%mLab
  %mFunc.nam ?? %.beg ?s ?%mLab
  .C G    /* Get BP */
  .8 G    /* Get SP */
  .4 +
  .C S    /* Set BP */
`%mBeg ?=
?`%mFunc.nam ?? %.ret ?s ?%mLab
  .C G    /* Get BP */
  .8 S    /* Set SP */
  .C S    /* Set BP */
  .1xj    /* Return */
  %mFunc.nam ?? %.end ?s ?%mLab
  %mFunc.var ?-
  %mFunc.par ?-
  %mFunc.nam ?-
`%mEnd ?=

?`<num:len> <str:name>`?p
?`%v1nam ?+ %v1len ?+
  %mFunc.var ????
  %v1len ?? %+ ?&
  %mFunc.var ?? ?=
  %mFunc.var ????
  %mFunc.var ?? %v1nam ?? ?s ?=
  %v1len ?- %v1nam ?-
`%mDef ?=
?`%mFunc.var ????
  %4 %* ?&
  %4 %- ?& ?#
  .8G .?$- .8S
`%mDefEnd ?=

?`<str:type> <str:name>`?p
?`%v1nam ?+
  %mFunc.par ?? %v1nam ?? ?s %v1par ?+
  %mFunc.var ?? %v1nam ?? ?s %v1var ?+
  %mVarPar ?? %mVarVar ??
  %v1par ?? ?~ .?/ ?$
  %v1var ?- %v1par ?- %v1nam ?-
`%mVar ?=
?`%v1par ?????#?$
`%mVarPar ?=
?`%v1var ?????#?$n
`%mVarVar ?=
?`<str:name>`?p
?`%v ?x ?%mVar
`%mVal ?=
?`<str:name>`?p
?`%a ?x ?%mVar
`%mAdr ?=
?`<vm:ofs> <str:name>`?p
?`%a+g ?x ?%mVar
`%mVal1 ?=
?`<vm:ofs> <str:name>`?p
?`%a+w ?x ?%mVar
`%mVal2 ?=
?`<vm:ofs> <str:name>`?p
?`%a+G ?x ?%mVar
`%mVal4 ?=

?`<vm:len> : <vm:adr>`?p
?`.3+.2>.2<
  .8-.8Gx-.8S
  .8G.4+
`%mAlloc ?=

?`"mType"[<num:repn>]<str:typn><str:itmn>...[<num:rep1>]<str:typ1><str:itm1><str:name>`?p
?`%mType.nam ?+
  %mType %mType.lst ?+
  ?%mType1
`%mType ?=
?`?m %mType2 ???x %mType3 ???x
  %mType ?! ?/
`%mType1 ?=
?`%v1nam ?+ %v1typ ?+
  %mType1str ?? %mType1itm ??
  %mType.typ. %v1typ ???s %. ?s ?~ ?/
  ?%mType1
`%mType2 ?=
?`%mType.nam ?? %mType.lst ?+
  %mType.nam ?- ?%mType0
`%mType3 ?=
?`%v1rep ?+
  %v1rep ?? %mType.lst ?+
  %v1typ ?? %mType.lst ?+
  %v1nam ?? %mType.lst ?+
  %v1rep ?- %v1typ ?- %v1nam ?-
`%mType1str ?=
?`%v1typ ?? %mType.lst ?+
  %v1nam ?? %mType.lst ?+
  %v1typ ?- %v1nam ?-
`%mType1itm ?=
?`%mType.lst ?? %mType.lst ?-
`%mTypeLst ?=
?`?%mTypeLst
  %mType.typ. ?x?s %v1nam ?+
  %v1nam ?? %. ?s %v1itm ?+
  %0 %v1itm ?? ?=
  ?%mTypeItm
`%mType0 ?=
?`?%mTypeLst
  %v2nam ?+
  %mTypeItm2 ??
  %mTypeItm3 ??
  %mType %v2nam ?? ?! ?/
`%mTypeItm ?=
?`?%mTypeLst
  %v2typ ?+
  %mType.typ. %v2typ ???s %. ?s ?m ?~
  ?'?? ?%mTypeLst %* ?&' ?x
  ?'?p %v2typ ??' ?x ?/
  %v1itm ?? %v2nam ???s %.len ?s ?=
  %v1itm ????
  %v1itm ?? %v2nam ???s %.ofs ?s ?=
  %v1itm ?? %v2nam ???s %.len ?s ??
  %v1itm ???? %+ ?& %v1itm ?? ?=
  %v2typ ?- %v2nam ?-
  ?%mTypeItm
`%mTypeItm2 ?=
?`%v2nam ?-
  %v1itm ?-
  %v1nam ?-
`%mTypeItm3 ?=

?`<str:name> : <num:len>`?p
?`%mType.typ. ?x?s %. ?s ?? ?$
`%mTypeLen ?=
?`<str:itm><str:name> : <num:len>`?p
?`%mType.typ. ?x?s %. ?s ?x?s %.len ?s ?? ?$
`%mItemLen ?=
?`<str:itm><str:name> : <num:ofs>`?p
?`%mType.typ. ?x?s %. ?s ?x?s %.ofs ?s ?? ?$
`%mItemOfs ?=
